package com.example.fileuploaddownload.mapper;

import com.example.fileuploaddownload.entity.FileEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 文件Mapper接口
 * 所有SQL语句都通过XML文件配置
 */
@Mapper
public interface FileMapper {

    /**
     * 根据ID查询文件
     * @param id 文件ID
     * @return 文件实体
     */
    FileEntity selectById(Long id);

    /**
     * 根据文件名查询文件
     * @param fileName 文件名
     * @return 文件实体列表
     */
    List<FileEntity> findByFileName(@Param("fileName") String fileName);

    /**
     * 根据MD5值查询文件
     * @param fileMd5 文件MD5值
     * @return 文件实体
     */
    FileEntity findByFileMd5(@Param("fileMd5") String fileMd5);

    /**
     * 查询所有文件列表
     * @return 文件实体列表
     */
    List<FileEntity> findAllFiles();

    /**
     * 插入文件信息
     * @param fileEntity 文件实体
     * @return 影响行数
     */
    int insert(FileEntity fileEntity);

    /**
     * 更新文件信息
     * @param fileEntity 文件实体
     * @return 影响行数
     */
    int updateById(FileEntity fileEntity);

    /**
     * 删除文件信息
     * @param id 文件ID
     * @return 影响行数
     */
    int deleteById(Long id);

    /**
     * 更新上传进度
     * @param fileMd5 文件MD5值
     * @param uploadProgress 上传进度
     * @return 影响行数
     */
    int updateUploadProgress(@Param("fileMd5") String fileMd5, @Param("uploadProgress") Double uploadProgress);

    /**
     * 检查文件是否存在
     * @param fileMd5 文件MD5值
     * @return 是否存在
     */
    Boolean checkFileExists(@Param("fileMd5") String fileMd5);

}